"use strict";
const { app, BrowserWindow, screen, protocol } = require("electron");
import { createProtocol } from "vue-cli-plugin-electron-builder/lib";
const isDevelopment = process.env.NODE_ENV !== "production";
const path = require("path");
// const { startCPlusPlusService, stopCPlusPlusService } = require('./server')
import { LOGO_TYPE, SYS_NAME } from "./config/index";
// 对话框
const { renderDialog } = require("./utils/DialogFile");
// IPC 下载
const { listenerEvent, execAppDownloads } = require("./isMain/downLoad/index");
// IPC 传输完成
const { transferEvent } = require("./isMain/transferComplete/index");
// 下载上传配置项设置
const { setting } = require("./isMain/setting");
const { notificationfn, trayfn, closeUtils } = require("./utils/systemUtils");
// 封装的axios，配置CA
// const { createAxios, handerAxios } = require("./request/mainIndex")
// 自定义协议，外部唤起桌面应用
const {
  handleProtocolLink,
  checkForProtocolLink,
} = require("./utils/renderWin");
protocol.registerSchemesAsPrivileged([
  { scheme: "app", privileges: { secure: true, standard: true } },
]);
// 忽略证书错误
app.commandLine.appendSwitch("ignore-certificate-errors");
// 设置环境变量，回避非授信证书的问题！
process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0";
// 消除跨域警告
process.env["ELECTRON_DISABLE_SECURITY_WARNINGS"] = "true";
// 程序图标
const icon = path.join(
  __static,
  LOGO_TYPE === "zhy" ? "favicon.png" : "xnLogo.png"
);
let win;
let isStart = false;
async function createWindow() {
  // 上传文件对话框
  renderDialog();
  // 通过 IPC 通信触发 Node.js 服务的操作
  require("./isMain/GrpcToBackground");
  // sessionSet()
  const size = screen.getPrimaryDisplay().workAreaSize;
  const width = parseInt(size.width * 0.72);
  const height = parseInt(size.height * 0.82);
  win = new BrowserWindow({
    title: SYS_NAME,
    // width: 1120,
    // height: 680,
    width,
    height,
    fullscreen: false, // 是否全屏(默认就是false)
    fullscreenable: false, // 是否可以进入全屏(默认是true)
    backgroundColor: "#1e63ae",
    icon: icon,
    skipTaskbar: false, // 在任务栏中显示窗口, 默认false
    resizable: true, // 是否可以调整大小
    show: process.env.VUE_APP_IS_SHOW !== "production", // 先隐藏
    autoHideMenuBar: process.env.VUE_APP_IS_SHOW === "production", // 隐藏顶部工具栏，生产环境时设置为true
    // paintWhenInitiallyHidden: process.env.VUE_APP_IS_SHOW !== 'production', // 生产环境设置为false，开发设置为true
    // autoHideMenuBar: false, // 隐藏顶部工具栏，生产环境时设置为true(设置无边框，关闭程序会卡一下关闭)
    // frame: false, // 无边框(设置无边框，关闭程序会卡一下关闭)
    // transparent: true, // 透明
    webPreferences: {
      preload: path.join(__dirname, "preload"),
      nodeIntegration: true, // 允许html页面使用nodejs
      nodeIntegrationInWorker: true, // 允许多线程
      contextIsolation: true, // 允许在独立的js中允许 Electron API 和 preload 脚本，默认true
      enableRemoteModule: true, // 是否允许使用remote
      webSecurity: false, // 是否开启浏览器同源策略
      safeDialogs: false, // 是否启用浏览器样式保护对话框样式，默认false
    },
  });
  // 检查更新
  if (process.env.WEBPACK_DEV_SERVER_URL) {
    await win.loadURL(process.env.WEBPACK_DEV_SERVER_URL);
    if (!process.env.IS_TEST) win.webContents.openDevTools();
  } else {
    createProtocol("app");
    win.loadURL("app://./index.html");
  }
  // 初始化后再显示
  win.on("ready-to-show", function () {
    console.log("show");
    win.show();
    if (!isStart) {
      trayfn(icon, win);
      notificationfn(icon);
      isStart = true;
    }
  });

  // 叉掉程序不是程序退出，而是窗口关闭
  win.on("close", (e) => {
    if (!app.quitting) {
      e.preventDefault(); // 阻止窗口关闭
      win.hide();
    }
  });
  win.on("closed", () => {
    execAppDownloads(); // 保存正在下载的数据
    win = null;
  });

  // 通过 IPC 通信
  listenerEvent(win);
  transferEvent();
  setting(win);
}

app.on("ready", () => {
  createWindow();
  // 实例化axios
  // createAxios()
  // handerAxios()
  // startCPlusPlusService()
  // disableShortcut()
});

app.on("second-instance", (event, commandLine) => {
  if (!win.isVisible()) win.show();
  // 当应用已经运行，再次通过自定义协议打开时
  // const link = commandLine.find(arg => AGREEMENT_REGEXP.test(arg));
  // if (link) {
  //   handleProtocolLink(link);
  // }
});

// 操作快捷键
// function disableShortcut() {
//   // 注册一个全局快捷键，此处为禁用Ctrl+Shift+I
//   globalShortcut.register('CommandOrControl+Shift+I', () => { });
// }
// 用于处理应用程序退出的标志
app.on("before-quit", () => {
  app.quitting = true;
});
// 调用app.quit()触发这个事件
app.on("will-quit", () => {
  closeUtils();
});

app.on("window-all-closed", () => {
  if (process.platform !== "darwin") {
    // macOS 除外
    closeUtils();
    app.quit(); // 退出应用
    // stopCPlusPlusService()
  }
});

app.on("activate", () => {
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});
// 开发环境
if (isDevelopment) {
  if (process.platform === "win32") {
    process.on("message", (data) => {
      if (data === "graceful-exit") {
        app.quit();
        // stopCPlusPlusService()
      }
    });
  } else {
    process.on("SIGTERM", () => {
      app.quit();
      // stopCPlusPlusService()
    });
  }
}
// 在应用启动时检查命令行参数
if (!app.requestSingleInstanceLock()) {
  app.quit();
} else {
  app.on("ready", () => {
    checkForProtocolLink();
  });
}
